layui.use(['element', 'ax'], function () {
    var $ = layui.jquery;
    var $ax = layui.ax;
    var element = layui.element;

    //获取菜单树
    var ajax = new $ax(system.contextPath + "/admin/menu/search/vertical/tree");
    var result = ajax.start();
    if (result.status) {
        var menuTree = result.data;
        appendMenuNode(menuTree, $("#vertical-navigator"), false);

        element.render();
    }

    /**
     * 向指定的菜单容器上挂载菜单元素
     * @param menuTree 菜单树列表
     * @param menuHome 菜单容器
     * @param isChildren 是否有孩子节点
     */
    function appendMenuNode(menuTree, menuHome, isChildren) {
        var $menuHome = $(menuHome);
        //挂载菜单
        for (var i = 0; i < menuTree.length; ++i) {
            var $itemHome = isChildren ? $('<dd></dd>') : $('<li class="layui-nav-item"></li>');
            $menuHome.append($itemHome);
            var menuNode = menuTree[i];
            var $icon = menuNode.showMode == 'VERTICAL' ? '<i class="' + menuNode.icon + '"></i>&nbsp;&nbsp;' : "";
            var url = menuNode.url == "#" || !menuNode.url ? "#" : system.contextPath + menuNode.url;
            var aElem = '<a href="#" data-url="' + url + '" data-mode="' + menuNode.showMode + '" data-id="' + menuNode.id + '" data-value="' + menuNode.name + '">' + $icon + menuNode.name + '</a>';
            var $name = $(aElem);
            $itemHome.append($name);
            if (menuNode.children) {
                var $childrenHome = $('<dl class="layui-nav-child"></dl>');
                $itemHome.append($childrenHome);
                appendMenuNode(menuNode.children, $childrenHome, true);
            }
        }
    }

    //菜单点击管理
    var menuClickManager = [];
    /**
     * 垂直导航栏点击处理
     */
    element.on('nav(verticalFilter)', function (elem) {
        var id = $(elem[0]).attr("data-id");
        //垂直菜单，才加载水平菜单；
        var menuNode = loadLevelNavigator(id);
        var url = menuNode ? system.contextPath + menuNode.url : $(elem[0]).attr("data-url")
        var name = menuNode ? menuNode.name : $(elem[0]).attr("data-value")
        openTable(name, url);
    })

    /**
     * 水平导航栏点击处理
     */
    element.on('nav(levelFilter)', function (elem) {
        var id = $(elem[0]).attr("data-id");
        var $elem = $(elem[0]);
        var url = $elem.attr("data-url");
        var name = $elem.attr("data-value");
        openTable(name ,url);
    })

    function openTable(name ,url){
        //展示内容
        if (url && url != "#") {
            //清除选项卡其它的layui-this属性
            $("#tab-title-container").children().each(function () {
                $(this).removeClass("layui-this");
            });
            //清除其它内容展示组件的layui-show 属性，将其隐藏，只显示选中内容
            $("#tab-content-container").children().each(function () {
                $(this).removeClass("layui-show");
            });

            //创建key，用于标记当前选项卡，避免同一内容多次出现
            var tableKey = createTableKey(name ,url);

            //查询当前内容展示区是否存在相同内容的选项卡
            var $tableTitle = $("#tab-title-container").children('[data-id="'+tableKey+'"]');
            var $tableContent = $("#tab-content-container").children('[data-id="'+tableKey+'"]');
            if($tableTitle.length > 0){
                //展示当前标题和内容
                $tableTitle.eq(0).addClass('layui-this');
                $tableContent.eq(0).addClass("layui-show");
                //刷新内容
                $("#iframe-refresh").click();
            }else{
                //添加选项栏
                $("#tab-title-container").append($('<li class="layui-this" data-id="'+tableKey+'">' + name + '</li>'));
                //展示内容
                //追加当前内容展示
                var $content = $('<div class="layui-tab-item layui-show height-full" id="'+tableKey+'" data-id="'+tableKey+'">\n' +
                    ' <iframe src="' + url + '" style="overflow:visible;" scrolling="yes" frameborder="no" width="100%" height="100%"></iframe>\n' +
                    ' </div>');
                $("#tab-content-container").append($content);
            }
        }
        element.render();
    }

    function closeTable(name ,url){
        var tableKey = createTableKey(name ,url);
        //查询当前内容展示区是否存在相同内容的选项卡
        var $tableTitle = $("#tab-title-container").children('[data-id="'+tableKey+'"]');
        var $tableContent = $("#tab-content-container").children('[data-id="'+tableKey+'"]');
        if($tableTitle.length > 0){
            var selected = $tableTitle.eq(0).hasClass('layui-this');
            //关闭当前标题和内容
            $tableTitle.remove();
            $tableContent.remove();
            //当前被关闭窗口是否被选择，若是，则需要切换选中窗口
            if(selected){
                //选中最后一个
                var $lastTable = $("#tab-title-container").children().last();
                if($lastTable.length > 0){
                    $lastTable.eq(0).addClass('layui-this');
                    $("#tab-content-container").children().last().eq(0).addClass('layui-show');
                    //刷新内容
                    $("#iframe-refresh").click();
                }
            }
        }
        element.render();
    }

    function createTableKey(name ,url){
        return name + "##" + url;
    }

    /**
     * 加载水平菜单
     * @param id
     */
    function loadLevelNavigator(id) {
        var ajax = new $ax(system.contextPath + "/admin/menu/search/level/tree/" + id);
        var result = ajax.start();

        if (result.status && result.data && result.data.length > 0) {
            var menuTree = result.data;
            //移除之前的水平导航
            $("#level-navigator").children().each(function(){
                $(this).remove();
            });
            $("#level-navigator-container").attr("class", "");
            appendMenuNode(menuTree, $("#level-navigator"), false);
            element.render();

            //返回第一个有数据展示的菜单
            var menuNode = menuTree[0];
            while(menuNode.url == "#" || !menuNode.url){
                menuNode = menuNode.children[0];
            }
            return menuNode;
        }
    }

    $("#btnLogout").click(function () {
        window.location.href = system.contextPath + "/admin/logout"
    });

    //当前展示页iframe刷新
    $("#iframe-refresh").click(function () {
        //选中当前展示内容进行刷新
        $("#tab-content-container").children().each(function () {
            $(this).attr("class").indexOf("layui-show") != -1 ? $(this).children().first()[0].contentWindow.location.reload(true) : "";
        });
    });
    //关闭当前所有iframe窗口
    $("#iframe-close-all").click(function () {
        layui.layer.confirm("确定关闭所有窗口?", {
            btn: ['确认', '取消']
        }, function(index){
            $("#tab-title-container").children().each(function () {
                $(this).remove();
            });
            $("#tab-content-container").children().each(function () {
                $(this).remove();
            });
            layui.layer.close(index);
        }, function(index){
            layui.layer.close(index);
        });
    });

    /**
     * 设置密码功能
     */
    $("#setPassword").click(function () {
        openTable("修改密码" ,system.contextPath + "/admin/user/to/set/password")
    });
    /**
     * 修改个人信息功能
     */
    $('#userInfo').click(function () {
        openTable("修改个人信息",system.contextPath + "/admin/system/user_info")
    });

    /**
     * 主题选择
     */
    $('#theme').click(function () {
        openTable("主题选择",system.contextPath + "/admin/toTheme")
    });

    //将openTable暴露给子窗口 ,调用方法：    parent.tools.openTable("ooo" ,"/ccc");
    var _tools = {
        openTable: function (name ,url) {
            openTable(name ,url);
        },
        closeTable: function(name ,url){
            closeTable(name ,url);
        },
        getIframeId: function (name ,url) {
            return createTableKey(name ,url);
        },
        getCurrentIframe: function () {
            var res;
            $("#tab-content-container").children().each(function () {
                if($(this).attr("class").indexOf("layui-show") != -1){
                    res = $(this);
                }
            });
            return res;
        }
    }
    window.tools = _tools;
});